Манчестерское кодирование
Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка. |
Манче́стерское коди́рование[1], код Манчестер-II[2], абсолютный биимпульсный код[3] (иногда применяются синонимы: линейное кодирование[3][4], физическое кодирование, манипуляция сигнала, модуляция, импульсно-кодовая модуляция[3]) — один из способов кодирования двоичным цифровым сигналом исходных двоичных данных для передачи по одному двухуровневому каналу связи или записи на носитель информации.
Сигнал, закодированный манчестерским кодом, является самосинхронизирующимся, то есть для передачи данных не требуется дополнительная линия передачи тактовых импульсов за счет того, что за время передачи одного бита данных, независимо от того, 1 это или 0, обеспечивается один переход с одного уровня на другой, что позволяет приемнику синхронизировать свой внутренний тактовый генератор или таймер с тактовым генератором (таймером) передатчика.
Сигнал, закодированный в соответствии с манчестерским кодом, не имеет постоянной составляющей даже в случае передачи длинных последовательностей из нулей и единиц, поэтому передающие сигнал электрические соединения могут быть гальванически развязаны, например, с помощью трансформатора[5].
Название кодирования происходит из университета Манчестера, где такое кодирование было впервые использовано для хранения данных на магнитном барабане компьютера Манчестерский Марк I.
Описание
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/%D0%9C%D0%B0%D0%BD%D1%87%D0%B5%D1%81%D1%82%D0%B5%D1%80_2.svg/799px-%D0%9C%D0%B0%D0%BD%D1%87%D0%B5%D1%81%D1%82%D0%B5%D1%80_2.svg.png)
Варианты манчестерского кодирования:
Вариант 1 (по Г. Е. Томасу): логический ноль кодируется перепадом напряжения с низкого уровня на верхний уровень, а логическая единица кодируется перепадом напряжения с верхнего уровня на нижний[1].
Вариант 2 (стандарт IEEE 802.4, стандарт IEEE 802.3): логический ноль кодируется перепадом напряжения с верхнего уровня на нижний, а логическая единица кодируется перепадом напряжения с низкого уровня на верхний уровень[2][3].
Вариант 3 (дифференциальное манчестерское кодирование, разностное манчестерское кодирование[1], IEEE 802.5[1]): логический ноль кодируется изменением состояния в начале значащего интервала, а логическая единица кодируется сохранением предыдущего уровня[1].
Соглашения о кодировании битов
[править | править код]- Каждый бит исходных данных передается за фиксированное время («период передачи бита»), информационным является переход от низкого уровня сигнала к высокому или наоборот в середине каждого периода. Длительность передачи одного бита называют периодом кодирования, или просто периодом величина, обратная периоду, — число периодов в 1 секунду — называют скоростью передачи в бодах или битрейтом.
- Изменение уровня в начале периода является неинформационным и не передаёт данные.
Существуют разные соглашения для кодирования отдельных битов манчестерским кодом:
- Первое было впервые опубликовано Г. Е. Томасом в 1949 году и этого соглашения придерживаются многие авторы (например, Эндрю Таненбаум[1]). Для бита '0' уровень сигнала имеет перепад от низкого к высокому — с низким уровнем в первой половине интервала бита и высоким уровнем во второй половине. Для сигнала '1' бит перепад уровней будет от высокого к низкому[1].
- Другое соглашение, которого тоже придерживаются авторы (например, Уильям Сталлингс), а также по стандарт IEEE 802.4 (шина с маркерным доступом) стандарт IEEE 802.3 (Ethernet). В этом соглашении логический '0' представлен перепадом сигнала от высокого к низкому, а логическая '1' представлена последовательностью перепада сигнала от низкого к высокому. Вариант инверсный к варианту Томаса и преобразуется в вариант Томаса логической инверсией уровней в коде и обратное преобразование из стандарта IEEE в соглашение по Томасу[2][3].
- Если сигнал, кодированный манчестерским кодом, инвертируется в сообщении, он преобразуется из одного соглашения в другое. Эту неоднозначность можно преодолеть с помощью дифференциального манчестерского кодирования.
Уровень тактового импульса |
Бит данных |
Уровень манчестерского кода по IEEE 802.3[6] |
Уровень манчестерского кода по Томасу |
---|---|---|---|
0
|
0
|
0
|
1
|
1
|
1
|
0
| |
1
|
0
|
1
|
0 |
1
|
0
|
1 |
Принцип кодирования
[править | править код]Кодирование манчестерского кода относительно простое — производится логической операцией «ИСКЛЮЧАЮЩЕЕ ИЛИ» (сложение по модулю два, XOR) над текущим кодируемым битом и битом тактового генератора, в случае кодирования по IEEE 802.3 (примеры на псевдокоде):
Выход := Бит_данных XOR Тактовый_генератор;
или с инвертированием при кодировании по Томасу:
Выход := NOT(Бит_данных XOR Тактовый_генератор);
Возможна как аппаратная, так и программная реализация кодировщика.
При аппаратной реализации используется тактовый генератор со скважностью 2 и периодом повторения, равным периоду кодирования, регистр сдвига из которого на каждом периоде выталкивается кодируемый бит данных и логического элемента «ИСКЛЮЧАЮЩЕЕ ИЛИ».
При программной реализации создаётся виртуальный тактовый генератор с помощью программного таймера с длительностью выдержки, равной половине периода:
ЕСЛИ таймер_половина_периода сработал, ТО перезапустить таймер; Тактовый_генератор := Тактовый_генератор XOR 1; КОНЕЦ ЕСЛИ;
Возможна и предпочтительнее реализация тактового генератора по прерываниям аппаратного таймера.
Далее для формирования окончательного выходного кода производится операция «ИСКЛЮЧАЮЩЕЕ ИЛИ» с битом данных, например, выдвинутом из регистра, где находится текущее кодируемое слово.
Принцип декодирования
[править | править код]При декодировании возможны два варианта:
- на приёмном конце (декодировщику) известна длительность периода кодирования;
- и второй — декодировщику не известен период кодирования.
Далее все уровни и фронты описаны применительно к соглашению о кодировании по IEEE 802.3, при соглашении по Г. Е. Томасу все уровни и фронты заменяются на инверсные.
При известном периоде кодирования
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Manchester_encoding_both_conventions-ru.svg/350px-Manchester_encoding_both_conventions-ru.svg.png)
В первом случае при декодировании вначале производится битовая синхронизация — определяется середина периода. Для этого декодировщик следит за фронтами и спадами сигнала, два соседних перепада разного направления, разделенные 1 периодом, являются признаком последовательно идущих 0 и 1 или 1 и 0 в потоке данных, причём, если первый из этих перепадов нарастающий (фронт), а второй — падающий (спад), то это означает, что в потоке данных это комбинация двух битов 1 и 0 или 0, 1 в случае спада-фронта, также, второй из этих перепадов указывает на середину периода кодирования. В битовый поток декодированных данных записывается комбинация из двух этих битов. Далее декодировщик выжидает время, примерно равное 3/4 периода, и начинает следить за возникновением перепада, при появлении перепада, если это спад, это означает, что очередной бит данных 0, и 1 — фронте[что?]. Одновременно по этому же перепаду перезапускается таймер выдержки 3/4 периода и далее процесс повторяется.
Начало проверки прихода перепада через 3/4 периода выбрано из соображений помехоустойчивости, так например, в результате джиттера и/или расплывания (удлинения) перепадов, аддитивных помех в линиях передачи моменты возникновения перепадов колеблются относительно идеализированного случая, с другой стороны, при соседних одинаковых битах в потоке данных перепады происходят на границе между двумя периодами передачи одинаковых битов и проверка возникновения перепада должна производиться после моментов границ тактов.
Также, по приходе каждого информационного перепада имеется возможность измерить длительность периода вспомогательным таймером и подстроить, при необходимости, длительность выдержки таймера в 3/4 периода. Это позволяет отследить медленные изменения периода кодировщика, например, колебания скорости протяжки магнитной ленты при считывании с накопителей на магнитной ленте или разную скорость протяжки рукой человека карточки с магнитной полоской.
Для облегчения битовой синхронизации блоки данных в манчестерском коде, особенно при хранении их на магнитных носителях, обычно предваряются достаточно длинной синхропоследовательностью 1010101…
Определение начала информационного блока
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Block_synchronization_in_Manchester_decoder.svg/300px-Block_synchronization_in_Manchester_decoder.svg.png)
Обнаружено совпадение содержимого регистра сдвига с инверсией сигнатуры, поэтому все информационные биты, следующие за сигнатурой логически инвертируются. Для упрощение рисунка и наглядности в качестве примера взята 5-ти битовая сигнатура.
Достижение битовой синхронизации недостаточно для приёма потока информационных битов, так как во многих случаях неизвестно начало информационного блока в потоке неразличимых битов, например, при считывании данных с магнитного дискового накопителя. Поэтому дополнительно применяют синхронизацию по слову синхронизации.
Кодировщик при кодировании в начале информационного блока вставляет двоичное слово синхронизации или сигнатуру синхронизации, которая должна быть известна декодировщику. Для начала синхронизации блока декодировщик постоянно сравнивает последовательность битов в сдвиговом регистре после каждого сдвига, длина этого регистра равна длине сигнатуры, в который на каждом периоде вдвигается очередной бит, с заданным словом синхронизации. Совпадение слова в регистре сдвига и сигнатуры или её инверсии является признаком начала информационного блока и далее декодировщик интерпретирует поток битов как информационные. Длина слова синхронизации в разных системах различна, но обычно не менее 2 байтов, в протоколе Ethernet, например, длина сигнатуры принята равной 56 битов.
В информационном потоке не должно встречаться слово синхронизации, или, по крайней мере, вероятность такого появления должна быть пренебрежимо малой. Чем длиннее сигнатура, тем меньше вероятность её существования в информационном потоке. С другой стороны, сигнатура не несёт полезной информации и длинная сигнатура снижает скорость передачи информации. Если сигнатура короткая, то информационный поток перед кодированием проверяется на случайное присутствие последовательности битов, совпадающей с сигнатурой, и при необходимости информационный блок перекодируется для исключения сигнатуры, либо после достижения синхронизации по началу блока данных декодировщик игнорирует попадающиеся сигнатуры в блоке данных до окончания приёма всего блока.
Также используется вариант синхронизации информационного блока с помощью заведомо невозможного в манчестерском коде длительностей низкого и высокого уровней (0 и 1). В «правильном» коде эта длительность не может быть более периода, если в начале блока вставить, например, два периода низкого уровня и два периода высокого уровня, то такое событие не вводит постоянную составляющую в сигнал и указывает на начало информационного блока. По ГОСТ 52070-2003 синхронизация блока производится в течение 3 периодов — первые 1,5 периода на линии удерживается высокий уровень и остальные 1,5 периода — низкий. Возможны и другие варианты синхронизации, например, сигналом по линии сброса и др.
В многих случаях заранее неизвестно, сколько раз полученный кодированный сигнал подвергался логической инверсии при передаче, например, в сетях Ethernet кодированный сигнал может проходить через многочисленные узлы с оборудованием различных изготовителей, которое может в любой момент заменяться, или в случае чтения одной и той же магнитной ленты с данными на разных моделях накопителей на магнитной ленте. Поэтому при синхронизации начала блока данных по сигнатуре почти всегда проверяется совпадение потока данных с сигнатурой и её побитовой инверсией. Если найдена инверсная сигнатура, то все последующие принятые биты данных инвертируются, и оставляются без изменений в случае нахождения неинвертированной сигнатуры. Отсюда следует, что при такой синхронизации непринципиально по какому соглашению исходно была произведена кодировка — по Томасу или по IEEE 802.3.
Декодирование при заранее неизвестном периоде
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Time_histogram_between_adjacent_edges_of_the_Manchester_code.svg/300px-Time_histogram_between_adjacent_edges_of_the_Manchester_code.svg.png)
При априори неизвестном периоде кодирования декодировщик первоначально измеряет этот период измерением времени между соседними перепадами. Так как моменты перепадов реальных сигналов колеблются во времени из-за джиттера, помех, нерегулярных программных задержек в программном кодировщике и т. д. недостаточно измерить только несколько пар соседних перепадов. Поэтому при измерении периода и половины периода по потоку данных обычно накапливают некоторую статистику.
В правильном коде с не слишком большим джиттером гистограмма измерений будет состоять из двух групп выборок (рисунок 4), причём чем меньше джиттер, тем у́же будут группы на гистограмме. Первая группа отвечает длительности 1/2 периода, вторая — целому периоду. По результатам статистической обработки полученной гистограммы определяется период и его значению настраивается внутренний тактовый генератор декодировщика или его интервальный таймер.
Вычисление оценки периода по результатам измерений периодов и при необходимости половины периода производится по формуле среднего арифметического взвешенного.
- где — число интервалов по времени выборок интервалов гистограммы (карманов),
- — ширина интервала,
- — общее число выборок
- — число выборок попавшее в -й интервал.
и выбираются так, чтобы например, по рисунку мкс и мкс.
По аналогичному методу определяется усреднённое по статистической совокупности значение половины периода
После определения периода дальнейшее декодирование не отличается от описанного выше декодирования с заранее известным периодом.
Реализации
[править | править код]Программная
[править | править код]В первых бытовых компьютерах, например, Sinclair ZX80, «Электроника БК-0010», ZX Spectrum в качестве внешнего накопителя использовались бытовые магнитофоны. В этих компьютерах кодирование и декодирование манчестерского кода при обмене с магнитофоном производилось программно.
В современных системах программное кодирование и декодирование применяется редко, и эти функции возлагаются на специализированные микросхемы или фунциональные блоки в составе других микросхем, например, в микроконтроллерах, микропроцессорах.
Аппаратная
[править | править код]Выпускается ряд специализированных микросхем для кодирования и декодирования манчестерского кода, например:
- 5862ИН1Н4 — кодер-декодер манчестерского кода[7]
- К588ВГ3, К588ВГ6 — КМОП кодер-декодер манчестерского кода, созданные ещё в конце 80-х годов[8]
- DS8102 — независимый двухканальный дельта-сигма модулятор, который преобразовывает измерения двух входных дифференциальных пар аналоговых сигналов в манчестерский код на выходе; MAXQ3108 — двухъядерный микроконтроллер, который включает декодер манчестерского кода[9]
- 3D7501, ACT-15530, HI-15530, HD-15530, HD-15531, СТ-10894 — монолитные кодеры-декодеры манчестерского кода и другие[8].
Спектр манчестерского кода
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Spectra_of_the_Manchester_code_and_NZR-ru.svg/300px-Spectra_of_the_Manchester_code_and_NZR-ru.svg.png)
Так как на каждый бит данных происходит по две смены уровня сигнала, это приводит к тому, что спектр манчестерского кода занимает вдвое бо́льшую полосу частот по сравнению, например, с кодом NZR (Non-zero return, переход без возврата к нулю).
Сравнение спектров манчестерского кода и NZR приведено на рисунке. Так как манчестерский код не имеет постоянной составляющей (в случае его кодирования разнополярными равными по модулю уровнями), спектральная плотность мощности манчестерского кода равна нулю на нулевой частоте, в отличие от кода NZR, всегда при любых уровнях имеющего постоянную составляющую, и его спектр имеет конечную спектральную мощность на нулевой частоте.
Максимум спектральной мощности манчестерского кодирования приходится на частоту, равную частоте битрейта.
Манчестерское кодирование как фазовая манипуляция
[править | править код]Манчестерское кодирование можно рассматривать как частный случай двоичной фазовой манипуляции (ФМ), в которой данные управляют фазой прямоугольной волны несущей, частота которых является битрейтом.
Преимущества и недостатки
[править | править код]Достоинства
[править | править код]- Самосинхронизация
Наличие двух гарантированных переходов при передаче 1 бита позволяет сигналу быть самосинхронизирующимся, что позволяет приемнику (декодеру) правильно настроиться на скорость передачи. Для передачи не требуется дополнительная линия для передачи синхросигнала. Также в поток битов данных не нужно вставлять стартовые и стоповые биты, как например, в протоколах RS-232 и RS-485, из-за чего плотность данных в общем потоке битов кода приближается к 100 % (например, для кода NRZ 1-8-0 она равна 80 %). При декодировании возможно выделение кода данных и тактового сигнала напрямую из закодированного сигнала без использования тактового генератора [11].
- Отсутствие постоянной составляющей
Независимо от конкретного потока битов сигнал манчестерского кодирования не содержит постоянной составляющей, если значения верхнего и нижнего уровней равны по модулю. Это облегчает построение гальванической развязки с помощью трансформатора[5] и чтение-запись на магнитные носители.
Недостатки
[править | править код]- Полоса частот
Для передачи манчестерского кода требуется вдвое большая полоса пропускания канала (ширина канала), по сравнению, например, NRZ-кодированием.
- Требования к джиттеру
Предъявляет повышенные требования к стабильности фронтов во времени — низкому джиттеру. Существуют другие способы кодирования, например, код 8B/10B имеет более узкую полосу частот, но более требователен к уменьшению джиттера.
Области применения манчестерского кодирования
[править | править код]Манчестерское кодирование применяется:
- В технологии Ethernet (IEEE 802.3). Так, например, код манчестер-2 применяется в стандартах сетевых протоколах Ethernet, Token Ring, MIL-STD-1553B (ГОСТ 52070-2003), MIL-STD-1760 и многих других[12].
- В технологии 10BASE-T.
- Протоколы управления различными устройствами по инфракрасному каналу.
- В RFID-метках.
- В NFC-устройствах.
Примечания
[править | править код]- ↑ 1 2 3 4 5 6 7 Таненбаум Э. Компьютерные сети. — 4-е изд.. — СПб.: Питер, 2003. — 992 с. — ISBN 5-318-00492-X.
- ↑ 1 2 3 Дж. Парк, С. Маккей, Э. Райт. Передача данных в системах контроля и управления: практическое руководство / перевод с англ. В. В. Савельева. — М.: ООО "Группа ИДТ", 2007. — 480 с. — ISBN 978-5-94833-023-5.
- ↑ 1 2 3 4 5 Берлин А. Н. Коммутация в системах и сетях связи. — М.: Эко-Трендз, 2006. — 344 с. — ISBN 5-88405-073-9.
- ↑ Абилов А. В. Сети связи и системы коммутации. — М.: Радио и связь, 2004. — 288 с. — ISBN 5-256-01704-7.
- ↑ 1 2 Дансмор Брэд, Сканьдер Тоби. Справочник по телекоммуникационным технологиям. — М.: Вильямс, 2004. — 640 с. — ISBN 5-8459-0562-1.
- ↑ Манчестерское кодирование данных для радиосвязи., Архивировано 29 мая 2018, Дата обращения: 28 мая 2018
- ↑ Микросхема специализированного манчестерского кода . Дата обращения: 24 сентября 2020. Архивировано 10 сентября 2016 года.
- ↑ 1 2 https://smekni.com/a/121807/preobrazovatel-kodov-manchester-2/ Преобразователь кодов Манчестер-2
- ↑ MAXQ3108
- ↑ Data Communication Fundamentals . Дата обращения: 24 сентября 2020. Архивировано 16 августа 2021 года.
- ↑ Новиков Ю. В., Карпенко Д. Г. Аппаратура локальных сетей. Функции, выбор, разработка.. — М.: Эком, 1997. — С. 101. — 286 с. — ISBN 5-7163-024-3.
- ↑ Сетевые протоколы . Дата обращения: 24 сентября 2020. Архивировано 14 марта 2022 года.
Литература
[править | править код]- Forster R. (2000). «Manchester encoding: Opposing definitions resolved». Engineering Science & Education Journal. 9 (6): 278. doi:10.1049/esej:20000609.
- Tanenbaum, Andrew, S. (2002). Computer Networks (4th Edition). Prentice Hall. pp. 274–275. ISBN 0-13-066102-3
- Stallings, William (2004). Data and Computer Communications (7th ed.). Prentice Hall. pp. 137–138. ISBN 0-13-100681-9.
- Гольдштейн Б. С. Протоколы сети доступа. — БХВ-Петербург. — 2005.
- Сухман С. М., Бернов А. В., Шевкопляс Б. В. Синхронизация в телекоммуникационных системах: Анализ инженерных решений. — М.: Эко-Тренз, — 2003, 272 с. ISBN 5-88405-046-1